#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
// #include <sys/stat.h>
// #include <sys/types.h>
#include <fcntl.h>

int DecToBin(int num, char *report)
{
    int i = 0;
    int bit = 0;
    bit = num % 2;
    num = num / 2;
    if (num != 0)
    {
        i = DecToBin(num, report);
    }

    report[i] = bit + '0';
    i++;
    return i;
}

int main()
{
    int fd = 0;
    int count = 0;
    char res[17] = {0};
    fd = open("./q.txt", O_RDONLY);
    if(fd ==-1)
    {
        perror("open");
        exit(-1);
    }
    unsigned short byte = 0;
    unsigned short unicode = 0;
    while (read(fd, &byte, 1))
    {
        if ((byte & 0b11110000) == 0b11100000) //&1111 000    1110 0000
        {
            unicode = (byte & 0b001111); // 从U-8中提取第一个字节（1110 高四位），从中获取unicode的高四位
            unicode = unicode << 12;

            byte = read(fd, &byte, 1);
            unicode = unicode | ((byte & 0b00111111) << 6); // 从U-8取中六位（10 中六位）&（00111111）取unicode码的放到中间6位

            byte = read(fd, &byte, 1);
            unicode = unicode | (byte & 0b00111111); // 取（10 后六位）最后6位
            memset(res,0,sizeof(res));
            DecToBin(unicode, res);
            puts(res);
            printf("unicode = %x\n", unicode);
            if ((unicode >= 0x4e00) && (unicode <= 0x9fa5))
            {
                count++;
            }
        }
    }
    printf("%d\n", count);
    close(fd);
    return 0;
}